<?php
/**
 * Campo.php
 */

/**
 * @author Grover Campos
 * @version 1.0
 * @created 03-ago-2009 06:43:06 p.m.
 */
class Gtux_Model_Campo extends Gtux_Model_Estructura 
{
  /**
   * @var int
   */
  private $_id_formulario;
  /**
   * @var int
   */
  private $_id_subformulario;
  /**
   * @var int
   */
	private $_id_campo;
	/**
	 * @var string
	 */
	private $_nombre;
	/**
	 * @var string
	 */
	private $_etiqueta;
	/**
	 * @var string
	 */
	private $_tabla_foranea;
	/**
	 * @var string
	 */
	private $_campo_tabla;
	/**
	 * @var string
	 */
	private $_requerido;
	/**
	 * @var bool
	 */
	private $_visible;
	/**
	 * @var int
	 */
	private $_tipo_dato;
	/**
	 * @var int
	 */
	private $_id_elemento;
	/**
	 * @var int
	 */
	private $_tipo_validacion = 0;
	/**
	 * @var string
	 */
	private $validacion_params = '';
	/**
	 * @var string
	 */
	private $_mensaje_error = '';
	/**
	 * @var string
	 */
	private $_descripcion = '';
	/**
	 * @var bool
	 */
	private $_listado = false;
	
	/**
	 * @var CAMPO BIT = 1
	 */
  const CAMPO_BIT       = 1;
	const CAMPO_TINYINT   = 2;
	const CAMPO_SMALLINT  = 3;
	const CAMPO_MEDIUMINT = 4;
  const CAMPO_INT       = 5;
	const CAMPO_BIGINT    = 6;
  const CAMPO_FLOAT     = 7;
	const CAMPO_DOUBLE    = 8;
  const CAMPO_DECIMAL   = 9;
  
  const CAMPO_DATE      = 10;
  const CAMPO_TIME      = 11;
  const CAMPO_TIMESTAMP = 12;
  const CAMPO_DATETIME  = 13;
  
  const CAMPO_CHAR      = 14;
	const CAMPO_VARCHAR   = 15;
	const CAMPO_TINYTEXT  = 16;
	const CAMPO_TEXT      = 17;
	const CAMPO_MEDIUMTEXT= 18;
	const CAMPO_LONGTEXT  = 19;
	
	const CAMPO_TINYBLOB  = 20;
	const CAMPO_BLOB      = 21;
	const CAMPO_MEDIUMBLOB= 22;
	const CAMPO_LONGBLOB  = 23;
	
	const CAMPO_ENUM      = 24;
	const CAMPO_SET       = 25;

	/**
	 * Devuelve el subformulario
	 *
	 * @return Gtux_Model_Subformulario
	 */
	public function getSubformulario() 
	{
		if (null != $this->_id_formulario && null != $this->_id_subformulario) 
		{
		  return new Gtux_Model_Subformulario(array(
		    'id_formulario'    => $this->_id_formulario,
		    'id_subformulario' => $this->_id_subformulario
		  ));
		}
		return false;
	}
	
	/**
	 * Devuelve el id del subformulario
	 *
	 * @return int
	 */
	public function getIdSubformulario() 
	{
		return $this->_id_subformulario;
	}
	
	/**
	 * Establece el subformulario
	 *
	 * @param Gtux_Model_Subformulario $subformulario
	 * @return Gtux_Model_Campo
	 */
	public function setSubformulario(Gtux_Model_Subformulario $subformulario) 
	{
		$this->_id_formulario    = $subformulario->getIdFormulario();
		$this->_id_subformulario = $subformulario->getIdSubformulario();
    return $this;
	}
	
	/**
	 * Devuelve el id del campo
	 *
	 * @return int
	 */
	public function getIdCampo()
	{
		return $this->_id_campo;
	}

	/**
	 * Establece el id del campo
	 * 
	 * @param int $id_campo
   * @return Gtux_Model_Campo
	 */
	public function setIdCampo($id_campo)
	{
	  if (Zend_Validate::is($id_campo, 'Int'))
	  {
		  $this->_id_campo = $id_campo;
	  }
    return $this;
	}

	/**
	 * Devuelve el nombre
	 *
	 * @return string
	 */
	public function getNombre()
	{
		return $this->_nombre;
	}

	/**
	 * Establece el nombre
	 * 
	 * @param string $nombre
   * @return Gtux_Model_Campo
	 */
	public function setNombre($nombre)
	{
		$this->_nombre = trim((string)$nombre);
		return $this;
	}

	/**
	 * Devuelve la etiqueta
	 *
	 * @return string
	 */
	public function getEtiqueta()
	{
		return $this->_etiqueta;
	}

	/**
	 * Establece la etiqueta
	 * 
	 * @param string $etiqueta
   * @return Gtux_Model_Campo
	 */
	public function setEtiqueta($etiqueta)
	{
		$this->_etiqueta = trim((string)$etiqueta);
    return $this;
	}

	/**
	 * Devuelve el nombre de la tabla foranea
	 *
	 * @return string
	 */
	public function getTablaForanea()
	{
		return $this->_tabla_foranea;
	}

	/**
	 * Establece el nombre de la tabla foránea
	 * 
	 * @param string $nombre_tabla
   * @return Gtux_Model_Campo
	 */
	public function setTablaForanea($nombre_tabla)
	{
		$this->_tabla_foranea = trim((string)$nombre_tabla);
    return $this;
	}
	
	/**
	 * Devuelve el campo de la tabla foranea
	 *
	 * @return string
	 */
	public function getCampoTabla() 
	{
		return $this->_campo_tabla;
	}
	
	/**
	 * Establece el campo en la tabla foranea 
	 *
	 * @param string $campo_tabla
   * @return Gtux_Model_Campo
	 */
	public function setCampoTabla($campo_tabla) 
	{
		$this->_campo_tabla = trim((string)$campo_tabla);
    return $this;
	}

	/**
	 * Devuelve si es requerido
	 *
	 * @return bool
	 */
	public function getRequerido()
	{
		return $this->_requerido;
	}

	/**
	 * Establece si es requerido
	 * 
	 * @param bool $requerido
   * @return Gtux_Model_Campo
	 */
	public function setRequerido($requerido)
	{
		$this->_requerido = (bool)$requerido;
    return $this;
	}
	
	/**
	 * Devuelve si es visible
	 *
	 * @return bool
	 */
	public function getVisible()
	{
		return $this->_visible;
	}

	/**
	 * Establece visible
	 * 
	 * @param bool $visible
   * @return Gtux_Model_Campo
	 */
	public function setVisible($visible)
	{
		$this->_visible = (bool)$visible;
    return $this;
	}

	/**
	 * Devuelve el tipo de dato
	 *
	 * @return int
	 */
	public function getTipoDato()
	{
		return $this->_tipo_dato;
	}

	/**
	 * Establece el tipo de dato
	 * 
	 * @param int $tipo_dato
   * @return Gtux_Model_Campo
	 */
	public function setTipoDato($tipo_dato)
	{
	  if (Zend_Validate::is($tipo_dato, 'Int'))
	  {
		  $this->_tipo_dato = $tipo_dato;
	  }
    return $this;
	}

	/**
	 * Devuelve el tipo de validacion
	 *
	 * @return int
	 */
	public function getTipoValidacion()
	{
		return $this->_tipo_validacion;
	}

	/**
	 * Establece el tipo de validación
	 * 
	 * @param int $tipo_validacion
   * @return Gtux_Model_Campo
	 */
	public function setTipoValidacion($tipo_validacion)
	{
	  if (Zend_Validate::is($tipo_validacion, 'Int'))
	  {
		  $this->_tipo_validacion = $tipo_validacion;
	  }
    return $this;
	}

	/**
	 * Devuelve los parámetros de las validaciones
	 *
	 * @return Gtux_Model_Campo
	 * @todo 
	 */
	public function getValidacionParams()
	{
		return $this->validacion_params;
	}

	/**
	 * Establece los parámetros
	 * 
	 * @param array $params
   * @return Gtux_Model_Campo
	 */
	public function setValidacionParams($params = '')
	{
		$this->validacion_params = $params;
    return $this;
	}

	/**
	 * Devuelve el mensaje de error
	 *
	 * @return string
	 */
	public function getMensajeError()
	{
		return $this->_mensaje_error;
	}

	/**
	 * Establece el mensaje de error
	 * 
	 * @param string $mensaje_error
   * @return Gtux_Model_Campo
	 */
	public function setMensajeError($mensaje_error)
	{
		$this->_mensaje_error = trim((string)$mensaje_error);
    return $this;
	}

	/**
	 * Devuelve la descripción
	 *
	 * @return string
	 */
	public function getDescripcion()
	{
		return $this->_descripcion;
	}

	/**
	 * Establece la descripción
	 * 
	 * @param string $descripcion
   * @return Gtux_Model_Campo
	 */
	public function setDescripcion($descripcion)
	{
		$this->_descripcion = trim((string)$descripcion);
    return $this;
	}

  /**
   * Devuelve el id del elemento
   *
   * @return int
   */
  public function getIdElemento()
  {
    return $this->_id_elemento;
  }

	/**
	 * Establece el id del elemento
	 * 
	 * @param int $id_elemento
   * @return Gtux_Model_Campo
	 */
	public function setIdElemento($id_elemento)
	{
		$this->_id_elemento = $id_elemento;
    return $this;
	}

	/**
	 * Establece el elemento
	 * 
	 * @param Gtux_Model_Elemento $elemento
	 */
	public function setElemento(Gtux_Model_Elemento $elemento)
	{
	  $this->_id_elemento = $elemento->getIdElemento();
	}

	public function getElemento()
	{
	  if (Zend_Validate::is($this->_id_elemento, 'Int')) 
	  {
	  	return new Gtux_Model_Elemento(array('id_elemento' => $this->_id_elemento));
	  }
	  return false;
	}
	
	/**
	 * devuelve si el campo está listado
	 *
	 * @return bool
	 */
	public function getListado() 
	{
		return $this->_listado;
	}
	
	/**
	 * Establece si el campo es un listado
	 *
	 * @param bool $listado
   * @return Gtux_Model_Campo
	 */
	public function setListado($listado) 
	{
		$this->_listado = (bool)$listado;
    return $this;
	}
	
  /**
   * @see Gtux_Model_Abstract::getGateway()
   *
   * @return Gtux_Model_Gateway_Abstract
   */
  public function getGateway()
  {
    if (null == $this->_gateway) 
    {
      $this->setGateway(new Gtux_Model_Gateway_Campo());
    }
    return $this->_gateway;
  }


  public function __sleep() 
  {
    return array(
      '_id_subformulario', '_id_campo', '_nombre', '_etiqueta', '_tabla_foranea', '_campo_tabla',
      '_requerido', '_visible', '_tipo_dato', '_id_elemento', '_tipo_validacion', 'validacion_params',
      '_mensaje_error', '_descripcion', '_listado', '_created_at', '_user', '_id_formulario'
    );
  }
  
  /**
   * Set fields in object from a row
   *
   * @param Zend_Db_Table_Row_Abstract $row
   * @return Gtux_Model_Campo
   */
  public function setFromRow(Zend_Db_Table_Row_Abstract $row)
  {
    $rowArray = $row->toArray();
    if (isset($rowArray['id_formulario']) && isset($rowArray['id_subformulario'])) 
    {
      $options = array(
        'id_formulario'    => $rowArray['id_formulario'],
        'id_subformulario' => $rowArray['id_subformulario']
      );
    	$this->setSubformulario(new Gtux_Model_Subformulario($options));
    	unset($rowArray['id_formulario']);
    	unset($rowArray['id_subformulario']);
    }
    foreach ($rowArray as $column => $value) 
    {
      $this->$column = $value;
    }
    return $this;
  }

}
?>